package com.ruoyi.basics.service.impl;

import com.ruoyi.basics.domain.WmsArea;
import com.ruoyi.basics.domain.vo.WmsAreaVo;
import com.ruoyi.basics.mapper.WmsAreaMapper;
import com.ruoyi.basics.service.IWmsAreaService;
import com.ruoyi.common.utils.DateUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 库区管理Service业务层处理
 *
 * @author ruoyi
 * @date 2025-06-09
 */
@Service
public class WmsAreaServiceImpl implements IWmsAreaService {
    @Autowired
    private WmsAreaMapper wmsAreaMapper;

    /**
     * 查询库区管理
     *
     * @param id 库区管理主键
     * @return 库区管理
     */
    @Override
    public WmsArea selectWmsAreaById(Long id) {
        return wmsAreaMapper.selectWmsAreaById(id);
    }

    /**
     * 查询库区管理列表
     *
     * @param wmsArea 库区管理
     * @return 库区管理
     */
    @Override
    public List<WmsAreaVo> selectWmsAreaList(WmsArea wmsArea) {
        return wmsAreaMapper.selectWmsAreaList(wmsArea);
    }

    /**
     * 新增库区管理
     *
     * @param wmsArea 库区管理
     * @return 结果
     */
    @Override
    public int insertWmsArea(WmsArea wmsArea) {

        if (wmsArea == null || StringUtils.isBlank(wmsArea.getName())) {
            throw new IllegalArgumentException("区域名称不能为空");
        }
        // 2. 检查名称是否已存在（区分大小写）
        boolean exists = wmsAreaMapper.existsByAreaName(wmsArea.getName());
        if (exists) {
            throw new RuntimeException("区域[" + wmsArea.getName() + "]已存在");
        }

       //10.库位数量系统自动汇总
        wmsArea.setIncludedNum(wmsAreaMapper.countIncludedNum(wmsArea.getWarehouseId()));

        wmsArea.setCreateTime(DateUtils.getNowDate());

        return wmsAreaMapper.insertWmsArea(wmsArea);
    }

    /**
     * 修改库区管理
     *
     * @param wmsArea 库区管理
     * @return 结果
     */
    @Override
    public int updateWmsArea(WmsArea wmsArea) {
        wmsArea.setUpdateTime(DateUtils.getNowDate());
        return wmsAreaMapper.updateWmsArea(wmsArea);
    }

    /**
     * 批量删除库区管理
     *
     * @param ids 需要删除的库区管理主键
     * @return 结果
     */
    @Override
    public int deleteWmsAreaByIds(Long[] ids) {
        return wmsAreaMapper.deleteWmsAreaByIds(ids);
    }

    /**
     * 删除库区管理信息
     *
     * @param id 库区管理主键
     * @return 结果
     */
    @Override
    public int deleteWmsAreaById(Long id) {
        return wmsAreaMapper.deleteWmsAreaById(id);
    }


    /**
     * 库区状态修改
     * @param id
     * @param status
     * @return
     */
    @Override
    public int AreaStatus(Long id, Integer status) {
        // 检查ID是否有效
        if (id == null) {
            throw new IllegalArgumentException("仓库ID不能为空");
        }
        // 查询库区信息
        WmsArea wmsArea = wmsAreaMapper.selectWmsAreaById(id);
        // 检查仓库是否存在
        if (wmsArea == null) {
            throw new RuntimeException("未找到ID为" + id + "的仓库信息");
        }

        // 切换状态
        wmsArea.setStatus(wmsArea.getStatus() == 1 ? 0 : 1);


        // 更新库区状态
        return wmsAreaMapper.updateWmsArea(wmsArea);
    }

    @Override
    public String generateAreaCode() {
        String maxCode = wmsAreaMapper.findMaxAreaCode();
        String prefix = "KQ";
        Pattern pattern = Pattern.compile(prefix + "(\\d+)");
        int newCount = 1;
        if (maxCode != null) {
            Matcher matcher = pattern.matcher(maxCode);
            if (matcher.find()) {
                String numberPart = matcher.group(1);
                newCount = Integer.parseInt(numberPart) + 1;
            }
        }
        // 格式化数字部分为 6 位，不足补零
        return prefix + String.format("%06d", newCount);
    }

    @Override
    public int insertWmArea(List<WmsAreaVo> wmsAreaVos) {
        return wmsAreaMapper.insertWmArea(wmsAreaVos);
    }


}
